#include <iostream>
#include <cstdio>
#include <set>
#include <deque>

using namespace std;

int n;
long long m;
int a[100100];
long long dp[100100],sum[100100];
int q[100100],*qf,*qb;
int getLb(int pos)
{
    int l=0,r=pos;
    while(l<r)
    {
        int mid=(l+r)>>1;
        if(sum[pos]-sum[mid]<=m) r=mid;
        else l=mid+1;
    }
    return l+1;
}
int main()
{
    bool legal;
    set<long long> s;
    dp[0]=sum[0]=0;
    while(cin>>n>>m)
    {
        s.clear();
        legal=true;
        qf=qb=q;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",a+i);
            if(a[i]>m) legal=false;
            sum[i]=sum[i-1]+a[i];
        }
        if(legal)
        {
            for(int i=1;i<=n;i++)
            {
                int lb=getLb(i);
                //printf("lb: %d %d\n",i,lb);
                while(qf<qb&&*qf<lb-1)
                {
                    long long t=dp[*qf];
                    qf++;
                    if(qf<qb) s.erase(t+a[*qf]);
                }
                while(qf<qb&&a[*(qb-1)]<a[i])
                {
                    int t=a[*(qb-1)];
                    qb--;
                    if(qf<qb) s.erase(dp[*(qb-1)]+t);
                }
                if(qf<qb) s.insert(dp[*(qb-1)]+a[i]);
                *qb++=i;
                dp[i]=dp[lb-1]+a[*qf];
                if(!s.empty()) dp[i]=min(dp[i],*(s.begin()));
            }
            printf("%I64d\n",dp[n]);
        }
        else cout<<-1<<endl;
    }
    return 0;
}

